/*OMqL1umBd5PSTiOK+PvsEZYNnFSSf1b+5S8eSiMe3DAKtG1FzDijlCWKRWdkMDnY*/
/**
 * 表体批量复制粘贴事件
 */
import tableAfterEvent from './tableAfterEvent';
import tableBeforeEvent from './tableBeforeEvent';

export default function (data) {
	const {
		props,
		props: { cardTable },
	} = this;
	let that = this;
	let {
		areaCode,
		column, //该列的模板(meta)
		newValue,
		changedrows, //变化的行数据
		allData: allDataBefore, //表格粘贴前的所有行数据
		currentIndex, //当前编辑的行
		pasteData, //粘贴的数据
	} = data;

	const { attrcode } = column;

	//循环判断单元格是否可编辑，并注册过滤条件
	let queryValue = [];
	let queryCondition = {}; //注意，这里应该是对象而不是方法（与编辑前是有区别的）
	let isManyCondition = true; //每行参展过滤条件是否不一样，如果不一样，值为true
	let indexs = [];

	//循环过滤无效数据
	/* 	for (let i = 0; i < newValue.length; i++) {
		let rowIndex = currentIndex + i;
		//过滤掉多余的行
		if (newValue[i].values.pk_card && newValue[i].values.pk_card.value) {
			queryValue.push(newValue[i]);
			indexs.push(rowIndex);
		}
	} */

	// 2、进行参照过滤
	//循环调用编辑前
	for (let i = 0; i < newValue.length; i++) {
		let rowIndex = currentIndex + i;
		let record = allDataBefore[rowIndex];
		let beforeRet = tableBeforeEvent.call(this, props, areaCode, attrcode, newValue[i], rowIndex, record);
		if (beforeRet) {
			//这里可以执行前端增加默认值方法，如果有的话
			let columnMeta = getColumnMeta(props, areaCode, attrcode);
			queryValue[i] = newValue[i];
			if (columnMeta && columnMeta.queryCondition) {
				typeof columnMeta.queryCondition === 'function'
					? (queryValue[i].queryCondition = columnMeta.queryCondition())
					: (queryValue[i].queryCondition = columnMeta.queryCondition);
			}
			indexs.push(rowIndex);
		}
	}

	const updateParams = {
		areaCode,
		column,
		queryValue,
		changedrows,
		pasteData,
		indexs, //过滤后的index的数组例如：[0,1,2,3,5]
		queryCondition, //如果是参照且参照过滤条件唯一就传，不一致就是前面说的，放到queryValue里
		isManyCondition, // true，代表有多个参照过滤条件，false表示只有一个
	};
	//没有变化的数据，直接返回
	if (!indexs.length) {
		return;
	}
	cardTable.updateAfterBatchChange(updateParams).then((res) => {
		let changedRowData = cardTable.getChangedRows(areaCode);
		console.log('------------ changedRowData', changedRowData);
		//以下几个字段的值需要注意和编辑后不同
		//value 在单个编辑后是对象，当前字段的新值， 和 批量变动是数组
		// changedrows 在单个编辑后 和 批量变动 都是数组
		// index 在单个编辑后是当前编辑的行号； 批量变动是变动行的数组
		// record 在单个编辑后是对象，当前行的数据； 批量变动是数组，变动的所有行的数据， 这里需要统一一下
		tableAfterEvent.call(
			that,
			that.props,
			areaCode,
			attrcode,
			queryValue,
			res.changedrows,
			indexs,
			changedRowData,
			'MultiLine'
		);
	});
}

function getColumnMeta(props, moduleId, attrcode) {
	let meta = props.meta.getMeta();
	let columnMeta = meta[moduleId].items.filter((item) => {
		return item.attrcode === attrcode;
	});
	return columnMeta && columnMeta[0];
}

/*OMqL1umBd5PSTiOK+PvsEZYNnFSSf1b+5S8eSiMe3DAKtG1FzDijlCWKRWdkMDnY*/